package com.sky.service.impl;


import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.sky.constant.StatusConstant;
import com.sky.context.ThreadLocalContext;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Employee;
import com.sky.pojo.Category;
import com.sky.service.CategoryService;
import com.sky.mapper.CategoryMapper;
import com.sky.vo.pageResultVO;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

/**
 * @author Morpeko
 * @description 针对表【category(果蔬及套餐分类)】的数据库操作Service实现
 * @createDate 2024-08-06 17:12:47
 */
@Service
@RequiredArgsConstructor//给final修饰的类属性进行构造器注入对象
public class CategoryServiceImpl implements CategoryService {
    @Autowired
    private CategoryMapper categoryMapper;

    /**
     * 修改分类信息
     *
     * @param categoryDTO
     */
    @Override
    public void updateCategory(CategoryDTO categoryDTO) {
        //创建用于更新分类信息的category对象.设置需要更新的字段属性值
        Category category = new Category().builder()
                .id(categoryDTO.getId())
                .name(categoryDTO.getName())
                .sort(categoryDTO.getSort())
                .type(categoryDTO.getType())
                .build();
        //补充前端没有传递的必要字段属性值
        //1.设置更新时间
        category.setUpdateTime(LocalDateTime.now());
        //2.设置更新人
        category.setUpdateUser(ThreadLocalContext.getCurrentLocalUserId());
        //业务实现:更新分类信息
        categoryMapper.updateCategory(category);


    }

    /**
     * 条件分页查询分类信息
     *
     * @param categoryDTO
     * @return
     */
    @Override
    public pageResultVO<Category> queryCategoryPage(CategoryPageQueryDTO categoryDTO) {
        //设置分页参数和排序规则
        PageHelper.startPage(categoryDTO.getPage(), categoryDTO.getPageSize(), "sort desc");
        //创建用于条件查询的category对象.设置查询条件属性值
        Category category = new Category().builder()
                .name(categoryDTO.getName())
                .type(categoryDTO.getType())
                .build();
        //业务实现:条件分页查询分类信息,获取分页结果对象page
        Page<Category> page = categoryMapper.queryCategoryPage(category);

        //封装分页查询的结果到pageResultVO对象中
        pageResultVO<Category> pageResultVO = new pageResultVO<>();
        pageResultVO.setTotal(page.getTotal());
        pageResultVO.setRecords(page.getResult());
        //返回分页查询的结果对象pageResultVO
        return pageResultVO;
    }

    @Override
    public void updateCategoryStatus(Integer status, Long id) {
        //创建用于更新分类状态的category对象.设置需要更新的字段属性值
        Category category = new Category().builder()
                .id(id)
                .status(status)
                .build();
        //业务实现:更新分类状态
        categoryMapper.updateCategoryStatus(category);
    }

    @Override
    public void saveCategory(CategoryDTO categoryDTO) {
        //创建用于保存分类信息的category对象.设置需要保存的字段属性值
        Category category = new Category().builder()
                .id(categoryDTO.getId())
                .name(categoryDTO.getName())
                .sort(categoryDTO.getSort())
                .type(categoryDTO.getType())
                .build();
        //补充前端没有传递的字段属性值
        //1.设置创建时间
        category.setCreateTime(LocalDateTime.now());
        //2.设置更新时间
        category.setUpdateTime(LocalDateTime.now());
        //3.设置创建人,把存放在threadlocal线程本地局部变量中的当前登录用户id设置到category对象的createUser属性中
        category.setCreateUser(ThreadLocalContext.getCurrentLocalUserId());
        //4.设置更新人
        category.setUpdateUser(ThreadLocalContext.getCurrentLocalUserId());
        //5.设置默认的状态为禁1,1代表启用,0代表禁用
        category.setStatus(StatusConstant.DISABLE);
        //业务实现:新增分类

        categoryMapper.saveCategory(category);
    }

    /**
     * 根据ID删除分类
     *
     * @param id
     */
    @Override
    public void deleteCategoryById(Long id) {
        //业务:根据ID删除分类
        //创建用来删除分类的对象
        Employee employee = new Employee()
                .builder()
                .id(id)
                .build();

        //业务实现:删除分类
        categoryMapper.deleteCategory(employee);
    }

    @Override
    public List<Category> listCategoryByStatus(Integer type) {
        //业务实现:根据分类类型查询分类列表
        //创建用于查询分类的对象
        Category category = new Category()
                .builder()
                .type(type)
                .build();


        //业务实现:根据分类类型查询分类列表
        List<Category> list = categoryMapper.queryCategoryPage(category);
        return list;
    }
}




